import Rx from "rxjs"

var subject = new Rx.Subject();

subject.subscribe({//对于整个observer来说，他并不知道他是subscribe在observable上还是subject上
  next: (v) => console.log('observerA: ' + v),
  error:()=>{console.log("errorA")}
});
subject.subscribe({
  next: (v) => console.log('observerB: ' + v),
  complete:()=>{console.log("complete")},
  error:()=>{console.log("errorB")}
});

//subject的主要特征就是可以发数据(类似于发射事件器)，直接next（）
subject.next(1);
subject.next(2);


//subject中有许多的变种
//BehaviorSubject：可以保留最近的一次数据
//ReplaySubject：可以保留最近的一些数据（具体的数据量可以设置）
//AsyncSubject：只有结束后才会收到消息

//subject来作为observer
console.log("----------------subject来作为observer---------------")
let foo = Rx.Observable.create(observer=>{
    observer.next(42);
    observer.next("after over");
    observer.error("error");
    observer.complete();
});
foo.subscribe(subject);//在调用的时候会同时调用绑定在subject上的两个observer

//这个类似于将observer添加到subject的队列中
// subject.subscribe({
//     next: (v) => console.log('observerB: ' + v),
//     complete:()=>{console.log("complete")},
//     error:()=>{console.log("errorB")}
//   });

//subject的感觉有点像这个。
//subject.subscribe(a);
//subject.subscribe(b);
// subject={
//     next:function(){
//         a.next();
//         b.next();
//     }
// }